@startuml
skinparam monochrome true
skinparam ClassBackgroundColor White
hide empty members
hide circle
skinparam defaultFontName Arial
skinparam defaultFontSize 11
skinparam classfontstyle bold
class "«Service» \nCart Service : Component" as _95_Cart_32_Service
class "«Service» \nCatalogue Service : Component" as _95_Catalogue_32_Service
class "«Service» \nDispatch Service : Component" as _95_Dispatch_32_Service
class "«Service» \nPayment Service : Component" as _95_Payment_32_Service
class "«Service» \nRatings Service : Component" as _95_Ratings_32_Service
class "«Service» \nShipping Service : Component" as _95_Shipping_32_Service
class "«Service» \nUser Service : Component" as _95_User_32_Service
class "«Service, Facade» \nNGINX API Gateway : Component" as _95_NGINX_32_API_32_Gateway
class "«Client» \nREST API Client : Component" as _95_REST_32_API_32_Client
class "«Web UI» \nWeb Client : Component" as _95_Web_32_Client
class "«RedisDB» \nCart and Anonymous User Count DB : Component" as _95_Cart_32_and_32_Anonymous_32_User_32_Count_32_DB
class "«Monitoring» \nCart Prometheus Monitor : Component" as _95_Cart_32_Prometheus_32_Monitor
class "«MongoDB» \nCatalogue Users Orders DB : Component" as _95_Catalogue_32_Users_32_Orders_32_DB
class "«Service, External Component» \nPaypal Payment Gateway : Component" as _95_Paypal_32_Payment_32_Gateway
class "«Monitoring» \nPayment Prometheus Monitor : Component" as _95_Payment_32_Prometheus_32_Monitor
class "«Tracing» \nInstana Agent : Component" as _95_Instana_32_Agent
class "«Message Broker, Pub/Sub Component» \nRabbit MQ : Component" as _95_Rabbit_32_MQ
class "«MySQLDB» \nRatings and Shipping Cities DB : Component" as _95_Ratings_32_and_32_Shipping_32_Cities_32_DB
_95_Cart_32_Service --> _95_Catalogue_32_Service: "«RESTful HTTP, Callback» \n" 
_95_Cart_32_Service --> _95_Cart_32_and_32_Anonymous_32_User_32_Count_32_DB: "«RESP, Synchronous, Callback» \n{description =\n"async callback for saving cart,\nsync get, del,\netc. for all other db operations"}\n" 
_95_Cart_32_Service --> _95_Cart_32_Prometheus_32_Monitor: "«In-Memory Connector» \n" 
_95_Cart_32_Service --> _95_Instana_32_Agent: "«HTTP/2» \n" 
_95_Catalogue_32_Service --> _95_Catalogue_32_Users_32_Orders_32_DB: "«MongoWire, Callback» \n" 
_95_Catalogue_32_Service --> _95_Instana_32_Agent: "«HTTP/2» \n" 
_95_Dispatch_32_Service --> _95_Instana_32_Agent: "«HTTP/2» \n" 
_95_Dispatch_32_Service --> _95_Rabbit_32_MQ: "«Subscriber» \n{channel = "orders"}\n" 
_95_Payment_32_Service --> _95_Paypal_32_Payment_32_Gateway: "«RESTful HTTP, Synchronous» \n" 
_95_Payment_32_Service --> _95_User_32_Service: "«RESTful HTTP, Synchronous» \n check for users\nand post orders" 
_95_Payment_32_Service --> _95_Cart_32_Service: "«RESTful HTTP, Synchronous» \n" 
_95_Payment_32_Service --> _95_Payment_32_Prometheus_32_Monitor: "«In-Memory Connector» \n" 
_95_Payment_32_Service --> _95_Instana_32_Agent: "«HTTP/2» \n" 
_95_Payment_32_Service --> _95_Rabbit_32_MQ: "«Publisher» \n{channel = "orders"}\n" 
_95_Ratings_32_Service --> _95_Ratings_32_and_32_Shipping_32_Cities_32_DB: "«MySQL Protocol» \n" 
_95_Ratings_32_Service --> _95_Catalogue_32_Service: "«RESTful HTTP» \n" 
_95_Shipping_32_Service --> _95_Cart_32_Service: "«RESTful HTTP» \n" 
_95_Shipping_32_Service --> _95_Ratings_32_and_32_Shipping_32_Cities_32_DB: "«JDBC» \n read only, query predefined cities table" 
_95_User_32_Service --> _95_Instana_32_Agent: "«HTTP/2» \n" 
_95_User_32_Service --> _95_Catalogue_32_Users_32_Orders_32_DB: "«MongoWire, Callback» \n users and orders" 
_95_User_32_Service --> _95_Cart_32_and_32_Anonymous_32_User_32_Count_32_DB: "«RESP, Callback» \n only used to track anonymous\nusers" 
_95_NGINX_32_API_32_Gateway --> _95_Catalogue_32_Service: "«RESTful HTTP» \n" 
_95_NGINX_32_API_32_Gateway --> _95_User_32_Service: "«RESTful HTTP» \n" 
_95_NGINX_32_API_32_Gateway --> _95_Cart_32_Service: "«RESTful HTTP» \n" 
_95_NGINX_32_API_32_Gateway --> _95_Shipping_32_Service: "«RESTful HTTP» \n" 
_95_NGINX_32_API_32_Gateway --> _95_Payment_32_Service: "«RESTful HTTP» \n" 
_95_NGINX_32_API_32_Gateway --> _95_Ratings_32_Service: "«RESTful HTTP» \n" 
_95_REST_32_API_32_Client --> _95_NGINX_32_API_32_Gateway: "«RESTful HTTP» \n" 
_95_Web_32_Client --> _95_NGINX_32_API_32_Gateway: "«HTTP» \n" 
@enduml
